// 当构造函数委托给另一个构造函数时，受委托的构造函数的初始值列表及其函数体先被执行，接着才会执行到委托函数的函数体。
#include <iostream>
#include <string>
using namespace std;
class OH {
  //三参数构造函数的参数列表和函数体首先被执行
  OH(string s, int a, int b) : book(s), price(a), sale(b) {
    cout << "OH(string s, int a, int b)" << endl;
  }
  //默认构造函数又委托给了三参数构造函数
  OH() : OH(" ", 0, 0){};
  // OH (istream& is)是一个委托构造函数，它委托给了默认构造函数OH()
  OH(istream &is) : OH() { cout << "OH (istream& is)" << endl; }

  string book;
  int price;
  int sale;
};